

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/fluid.png">
  <link rel="icon" href="/img/fluid.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="John Doe">
  <meta name="keywords" content="">
  
    <meta name="description" content="@[toc] 参考资料 视频资料 一、学习目标  了解Git基本概念 能够概述Git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用 idea 操作git  二、概述 2.1 开发中的实际场景 备份 代码还原 协同开发 追溯问题代码的编写人和编写时间  2.2 版本控制器的方式0x001 集中式版本控制工具 集中式版本控制工具，版本库是集中存放在中央服务器的，team里每个人wo">
<meta property="og:type" content="article">
<meta property="og:title" content="Git 笔记_ Git分布式版本控制工具 概述 _ 常用命令 _ 分支操作 _ 使用 IDEA 连接Gitee远程仓库">
<meta property="og:url" content="http://example.com/2022/03/29/Git%20%E7%AC%94%E8%AE%B0_%20Git%E5%88%86%E5%B8%83%E5%BC%8F%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E5%B7%A5%E5%85%B7%20%E6%A6%82%E8%BF%B0%20_%20%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%20_%20%E5%88%86%E6%94%AF%E6%93%8D%E4%BD%9C%20_%20%E4%BD%BF%E7%94%A8%20IDEA%20%E8%BF%9E%E6%8E%A5Gitee%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%20+Demo/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="@[toc] 参考资料 视频资料 一、学习目标  了解Git基本概念 能够概述Git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用 idea 操作git  二、概述 2.1 开发中的实际场景 备份 代码还原 协同开发 追溯问题代码的编写人和编写时间  2.2 版本控制器的方式0x001 集中式版本控制工具 集中式版本控制工具，版本库是集中存放在中央服务器的，team里每个人wo">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://img-blog.csdnimg.cn/ecde8be0c6d448c7b801f16da8fe7f54.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f0b40292bdcc4855ae7238533520fcb4.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/d9c5b2416dc740a5900a61bdb2bb6bac.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/78da93935d4c4b398547d88f59f866a8.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f7111e83d41443408f1ef6d929abaf3d.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/6fb143ea6cca4cbf93eb15a42b4354b5.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/1473a60495ef41ee86b34702739924bb.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/e5cd55c0af15416a89affd35c4c73c0e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/29cb317a99b1448e942a5230aa2df798.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/1b5892e682d34078b349aace9cfbf356.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/e363bbfae8fa49b6b446f9b0eec5585e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/fc90598904e54aa2842959827a879d2c.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/d3b1731bec41403fac5d1933941c7a04.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/3f4799af124f4672a4a11864fb805dd6.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/4078e8a4eecb4a87a41ebfb4cbb3c8d9.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/0e3d0572824c46e0ae4bb0c5efc438fc.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/9db6197d4a44476cb712d68d0db599d7.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/ae60eb0e4bdd49bc8727bcd88840e0ee.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/ab98e5e7085a458eb41a84ecad683251.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/274d0dd72f7845dea345e25c1cbf9d50.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/316865fc73ce424380c642ae55b2837e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/250f8f8c9b08440e97d5fe55c874f711.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/a39cd0d4c9564f699f957728fcd2b39e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/e8d9dc17ebc84db38ae18e3e129e641a.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/e82e6de4ff6743b29dd84d49879a2842.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/a88d43b3359f47c49d5adee7e0577cc0.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/871c32e9aaa14724ad560d2808d9ba1f.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/1639b96d770c4dca9f915286b5f872f2.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/8bfd9cae19cc4021b287d4638f6f03fb.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/03e2f09b8bbc4d70ba5adb9db121c7a1.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/ef67dc959f794f969fb92373811e9fb8.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/66221402c27d4fd0a7a051fbb2d4cc5e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/62547185482d4146a2845660942dfeb7.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/03a489c6dc3947faaa91945ab6bdd47e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/5221d0e5682a49879feda007a28c808f.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/c34e659e443346b092abde846819f749.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/8561091f572440219ec385a3543c56f2.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f04bc7123f9b48418c05317b093bb711.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/b2321ab20cc84691926d0a29357d05d7.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/69f7020bd5984a4792a225f8d2a293af.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f7340eee6c7e46d48e95dcef4c745834.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/c7930c5dd8fa499a94f52083259ecf18.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/e8f31e8e650f4688b3f0984d9853060a.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/9266b1b519f44c3c8387c46d6e3f42e3.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/44f29d76927c48af86199d63e3add43d.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/5696c2189f9148acb2fb048c9fe1fd70.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/5c36466d9e624639b8c552a2c3d0879b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/14790dca1af04bbe803e209e51381570.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/ca53bb9435354efb981e954e6d5bbe32.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/b3f19373e3144047ac70666c25651cfa.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/c0bed7f6d3eb4fb89898ea8dd6f23937.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/cf016c8043a7435883f094cb55e71c2a.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/5e44dac1aa6a467cb6183f2c8f49579a.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/0a50c63a04ff45b285f340709cf87b49.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/5ca40e5c9c91412b968e7648d75ea7e6.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/d4fe18147eb74f5eae192c578ad05728.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/a13a0a00b1d64f838f1c2f4c4147038c.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/74e5fbce320a48e090bfc89551227db5.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/b891d4b6130a405891a742830d109c4d.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f179d1e0f3e0466f8e40809b6cdb572e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/6a2839a677e542a4bfa1e5012ab02b51.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f1c97fd0f82d4856b81b4598ce90decb.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/36853c172bea4e1b8155cffa1ba6b28b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f30635df36154650a380c010e0c548ba.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/90e88413da9b4fd8aec67364c2fb9178.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/81f2268c7ca142999488d4e76325fe30.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/31bdc37cb3574d3bbd6c448dfe8b01d1.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/8ec69c0d8c1b49f5b6a5cfac4d2416d9.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/b801223f5d4b470bae00eab1278d2fb4.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/6f1913e262f846dba2cb4f03b32a7a03.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/3a6582f4063549e385eb1eb7cd13b2a2.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/760b9c719d984a4ebd9a992f361ace08.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/8d90e2f727fd498d93477cfb663cdbed.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/2c6112f8af854196a3fa170d68da8b6e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/bf11a11b3f104b36aeebf324027e72b0.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/4f56a8cc62c544fe8f58bf999437b8ff.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/7a5c371896fb4ae1aaaa777355b7523a.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/1623778bcb7248ce91f0cb6f98007cc1.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/204133ab89dd40f687d40dcc2d0f9dd6.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/4db94c9df4df42278ae69d50df3bb04f.png#pic_Center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/c6c8a21aa3324f4eb4e64e537dd11000.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/b20c113ec3dc44c6993060a2ce7c0c0f.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/8ada36907ca443639e785c2609840fe9.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f591c5ad22304074a7f75e4a874f2e5f.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/a69e5a787ad543b2adc7f8960a93162b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f29bc08fc8cb4d43ab89bfae9513ff8b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/ba4249cef33b4635a0946e949b4f1ff1.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/335ab5efb0cd4f1bb9681b223d94231b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/d252181b2365459f8ec222d0920136a7.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/6537d44df7d54cab8ee600cae0e463c5.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/0347ec5791bf4dcba6875a009b4118a7.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/757f35c6842746e7a81e0d686bede3f0.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/3d777a03b8c74b95a24543c063a19905.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/65dac3a1e28541e28ad4c03e03f6c707.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/f1a6879eaefd401c96bbdcbfb4aaab9b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/06b7ef2f9a6b4e6eb9723b60c8a51ed1.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/7c556342dcc34bf28ddbf746949df6e2.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/a6a0d04a92da4ff39bcd3fa906d6d0c4.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/79fe55caf6cc4fd2a8eb9303007d081e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20499397141e42dea4a2b6b100fca345.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/d20c0d1ce93341f29c16c766bb73864b.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/c10e6d736d414fe7bab84f89b471b1c9.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/2c4f67ae64c040f586399878ae71f427.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/246a80b36b1748a3922cafb57c50848a.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/fdc5894938f0449c99b78c57e7dbfd95.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/7e88718f42bc478bac692e1d5c25b24e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/2d36d177fa5040d3b288a858bb1dc95c.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/727008ae4f2b4ceca07a09f11d2923f0.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/aecd8f84020e48d0bc43081e7598f9a7.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/2a420d2c7c174f788a6fe0c7f67f931e.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/553b282977a945c585460a760d5a6cff.png#pic_center">
<meta property="og:image" content="https://img-blog.csdnimg.cn/8c3ca755f98848fa82e972e0d91939c6.png#pic_center">
<meta property="article:published_time" content="2022-03-29T12:40:29.000Z">
<meta property="article:modified_time" content="2022-08-22T15:43:37.697Z">
<meta property="article:author" content="John Doe">
<meta property="article:tag" content="Git">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://img-blog.csdnimg.cn/ecde8be0c6d448c7b801f16da8fe7f54.png#pic_center">
  
  
  
  <title>Git 笔记_ Git分布式版本控制工具 概述 _ 常用命令 _ 分支操作 _ 使用 IDEA 连接Gitee远程仓库 - Hexo</title>

  <link  rel="stylesheet" href="https://lib.baomitu.com/twitter-bootstrap/4.6.1/css/bootstrap.min.css" />



  <link  rel="stylesheet" href="https://lib.baomitu.com/github-markdown-css/4.0.0/github-markdown.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/hint.css/2.7.0/hint.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />



<!-- 主题依赖的图标库，不要自行修改 -->
<!-- Do not modify the link that theme dependent icons -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />


  <link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
  
    <link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
  




  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    Fluid.ctx = Object.assign({}, Fluid.ctx)
    var CONFIG = {"hostname":"example.com","root":"/","version":"1.9.2","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":""},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"right","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":0},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":true,"baidu":null,"google":null,"gtag":null,"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml"};

    if (CONFIG.web_analytics.follow_dnt) {
      var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
      Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
    }
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
  


  
<meta name="generator" content="Hexo 6.2.0"></head>


<body>
  

  <header>
    

<div class="header-inner" style="height: 70vh;">
  <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>尤 Ni&#39;s Blog</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              &nbsp;<i class="iconfont icon-search"></i>&nbsp;
            </a>
          </li>
          
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

  

<div id="banner" class="banner" parallax=true
     style="background: url('/img/default.png') no-repeat center center; background-size: cover;">
  <div class="full-bg-img">
    <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
      <div class="banner-text text-center fade-in-up">
        <div class="h2">
          
            <span id="subtitle" data-typed-text="Git 笔记_ Git分布式版本控制工具 概述 _ 常用命令 _ 分支操作 _ 使用 IDEA 连接Gitee远程仓库"></span>
          
        </div>

        
          
  <div class="mt-3">
    
      <span class="post-meta mr-2">
        <i class="iconfont icon-author" aria-hidden="true"></i>
        John Doe
      </span>
    
    
      <span class="post-meta">
        <i class="iconfont icon-date-fill" aria-hidden="true"></i>
        <time datetime="2022-03-29 20:40" pubdate>
          2022年3月29日 晚上
        </time>
      </span>
    
  </div>

  <div class="mt-1">
    
      <span class="post-meta mr-2">
        <i class="iconfont icon-chart"></i>
        
          13k 字
        
      </span>
    

    
      <span class="post-meta mr-2">
        <i class="iconfont icon-clock-fill"></i>
        
        
        
          111 分钟
        
      </span>
    

    
    
  </div>


        
      </div>

      
    </div>
  </div>
</div>

</div>

  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="side-col d-none d-lg-block col-lg-2">
      

    </div>

    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div id="board">
          <article class="post-content mx-auto">
            <!-- SEO header -->
            <h1 style="display: none">Git 笔记_ Git分布式版本控制工具 概述 _ 常用命令 _ 分支操作 _ 使用 IDEA 连接Gitee远程仓库</h1>
            
              <p class="note note-info">
                
                  
                    本文最后更新于：1 小时前
                  
                
              </p>
            
            
              <div class="markdown-body">
                
                <p>@[toc]</p>
<h1 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h1><hr>
<p><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1MU4y1Y7h5">视频资料</a></p>
<h1 id=""><a href="#" class="headerlink" title=""></a></h1><h1 id="一、学习目标"><a href="#一、学习目标" class="headerlink" title="一、学习目标"></a>一、学习目标</h1><hr>
<ul>
<li>了解Git基本概念</li>
<li>能够概述Git工作流程</li>
<li>能够使用Git常用命令</li>
<li>熟悉Git代码托管服务</li>
<li>能够使用 idea 操作git</li>
</ul>
<h1 id="二、概述"><a href="#二、概述" class="headerlink" title="二、概述"></a>二、概述</h1><hr>
<h2 id="2-1-开发中的实际场景"><a href="#2-1-开发中的实际场景" class="headerlink" title="2.1 开发中的实际场景"></a>2.1 开发中的实际场景</h2><ul>
<li>备份</li>
<li>代码还原</li>
<li>协同开发</li>
<li>追溯问题代码的编写人和编写时间</li>
</ul>
<h2 id="2-2-版本控制器的方式"><a href="#2-2-版本控制器的方式" class="headerlink" title="2.2 版本控制器的方式"></a>2.2 版本控制器的方式</h2><p><strong>0x001</strong> 集中式版本控制工具</p>
<p>集中式版本控制工具，版本库是集中存放在中央服务器的，team里每个人work时从中央服务器下载代码，必须联网才能工作，局域网或互联网。个人修改后提交到中央版本库</p>
<p>比如：SVN和CVS</p>
<p><strong>0x010</strong> 分布式版本控制工具</p>
<p>分布式版本控制系统没有 “中央服务器”的概念，每个人的电脑上都是一个完整的版本库，这样工作的时候就无需联网了，因为版本库就在本机上。多人协作只需要各自的修改推送给对方，就能互相看到对方的修改。</p>
<p>比如：Git</p>
<p><strong>0x011</strong> Git</p>
<p>特点：分布式、不需要中心服务器</p>
<p>Git是一个开源的分布式版本控制系统，可以有效、告诉地处理从很小到很大的版本控制管理。 Git是Linus Torvalds 先生（Linux之父）为了管理 Linux内核开发而开发的版本控制软件。</p>
<p><img src="https://img-blog.csdnimg.cn/ecde8be0c6d448c7b801f16da8fe7f54.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="2-3-Git-工作流程图-相关命令"><a href="#2-3-Git-工作流程图-相关命令" class="headerlink" title="2.3 Git 工作流程图 + 相关命令"></a>2.3 Git 工作流程图 + 相关命令</h2><p><img src="https://img-blog.csdnimg.cn/f0b40292bdcc4855ae7238533520fcb4.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>相关命令以及作用：</p>
<table>
<thead>
<tr>
<th align="left">命令</th>
<th align="left">作用描述</th>
</tr>
</thead>
<tbody><tr>
<td align="left">clone</td>
<td align="left">克隆，从远程仓库中克隆代码到本地仓库</td>
</tr>
<tr>
<td align="left">checkout</td>
<td align="left">检出，从本地仓库中检出一个仓库分支然后进行修订</td>
</tr>
<tr>
<td align="left">add</td>
<td align="left">添加，在提交前先将代码提交到暂存区</td>
</tr>
<tr>
<td align="left">commit</td>
<td align="left">提交，提交到本地仓库。本地仓库中保存修改的各个历史版本</td>
</tr>
<tr>
<td align="left">fetch</td>
<td align="left">抓取，从远程库抓取到本地仓库，不进行任何的合并操作</td>
</tr>
<tr>
<td align="left">pull</td>
<td align="left">拉取，从远程库拉到本地库，自动进行合并（merge），然后放到工作区，相当于 fetch + merge</td>
</tr>
<tr>
<td align="left">push</td>
<td align="left">推送，修改完成后，需要和团队成员共享代码时，将代码推送到远程仓库</td>
</tr>
</tbody></table>
<h1 id="三、Git-安装与常用命令"><a href="#三、Git-安装与常用命令" class="headerlink" title="三、Git 安装与常用命令"></a>三、Git 安装与常用命令</h1><hr>
<h2 id="3-1-Git环境配置"><a href="#3-1-Git环境配置" class="headerlink" title="3.1 Git环境配置"></a>3.1 Git环境配置</h2><p>Git官方网址：<a target="_blank" rel="noopener" href="https://git-scm.com/download/win">https://git-scm.com/download/win</a></p>
<p><img src="https://img-blog.csdnimg.cn/d9c5b2416dc740a5900a61bdb2bb6bac.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>点击 <code>Click here to download  </code> 直接下载，下载完毕后进行安装</p>
<p><img src="https://img-blog.csdnimg.cn/78da93935d4c4b398547d88f59f866a8.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/f7111e83d41443408f1ef6d929abaf3d.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/6fb143ea6cca4cbf93eb15a42b4354b5.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/1473a60495ef41ee86b34702739924bb.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/e5cd55c0af15416a89affd35c4c73c0e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/29cb317a99b1448e942a5230aa2df798.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/1b5892e682d34078b349aace9cfbf356.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/e363bbfae8fa49b6b446f9b0eec5585e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/fc90598904e54aa2842959827a879d2c.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/d3b1731bec41403fac5d1933941c7a04.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>![在这里插入图片描述](<a target="_blank" rel="noopener" href="https://img-blog.csdnimg.cn/741fbe834da543b6853f3514ab4ed7a1.png#pic_center">https://img-blog.csdnimg.cn/741fbe834da543b6853f3514ab4ed7a1.png#pic_center</a> &#x3D;80%x)</p>
<p>![在这里插入图片描述](<a target="_blank" rel="noopener" href="https://img-blog.csdnimg.cn/df73376bcbd74279885873a53b1730f9.png#pic_center">https://img-blog.csdnimg.cn/df73376bcbd74279885873a53b1730f9.png#pic_center</a> &#x3D;80%x)</p>
<p>Git 的两个版本：</p>
<p>Git GUI ： Git 提供的图形界面工具</p>
<p>Git Bash： Git 提供的命令行工具</p>
<p>当安装Git后首先要做的事情是设置用户名称和email地址。</p>
<p><strong>0x001</strong> 打开Git Bash 配置Git的邮箱</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git config --global user.name ccuni<br><br>git config --global user.email uni1024@qq.com<br></code></pre></td></tr></table></figure>

<p>后面参数不填可以查询结果</p>
<p><img src="https://img-blog.csdnimg.cn/3f4799af124f4672a4a11864fb805dd6.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="为常用指令配置别名（alias"><a href="#为常用指令配置别名（alias" class="headerlink" title="为常用指令配置别名（alias)"></a>为常用指令配置别名（alias)</h3><p><strong>0x001</strong> 使用Git Bash 在用户目录创建 bashrc文件</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">touch ~/.bashrc<br></code></pre></td></tr></table></figure>

<p><strong>0x010</strong> 编辑 <strong>.bashrc</strong> </p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">vim ~/.bashrc<br></code></pre></td></tr></table></figure>

<p>通过alias输入以下内容：</p>
<figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs jboss-cli"><span class="hljs-comment"># 用于输出git提交日志</span><br><span class="hljs-keyword">alias</span> git-log=&#x27;git log <span class="hljs-params">--pretty=oneline</span> <span class="hljs-params">--all</span> <span class="hljs-params">--graph</span> <span class="hljs-params">--abbrev-commit</span>&#x27;<br><br><span class="hljs-comment"># 用于输出当前目录所有文件及基本信息</span><br><span class="hljs-keyword">alias</span> ll=&#x27;<span class="hljs-keyword">ls</span> -al&#x27;<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/4078e8a4eecb4a87a41ebfb4cbb3c8d9.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">source ~/.bashrc<br></code></pre></td></tr></table></figure>

<p>现在使用<code>ll</code>命令则可以达到 <code>ls -al</code> 的效果</p>
<p><img src="https://img-blog.csdnimg.cn/0e3d0572824c46e0ae4bb0c5efc438fc.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="3-2-获取本地仓库"><a href="#3-2-获取本地仓库" class="headerlink" title="3.2 获取本地仓库"></a>3.2 获取本地仓库</h2><p>要使用Git对代码进行版本控制，首先需要获得本地仓库</p>
<ul>
<li>在电脑的任意位置创建一个空目录（比如test-git）作为本地的Git参控股</li>
<li>进入创建的目录，右键鼠标打开Git Bash窗口</li>
<li>执行 git init 命令</li>
<li>如果创建成功后可以在文件夹下看到隐藏的.git目录</li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/9db6197d4a44476cb712d68d0db599d7.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="3-3-基础操作指令"><a href="#3-3-基础操作指令" class="headerlink" title="3.3 基础操作指令"></a>3.3 基础操作指令</h2><p><img src="https://img-blog.csdnimg.cn/ae60eb0e4bdd49bc8727bcd88840e0ee.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>Git工作目录下对于文件的修改（增加、删除、更新）会存在几个状态，这些修改的状态会随着我们执行Git的命令而发生变化。</p>
<p>git add 工作区 -&gt; 暂存区</p>
<p>git commoit 暂存区 -&gt; 本地仓库</p>
<h3 id="3-3-1-查看修改的状态（status）"><a href="#3-3-1-查看修改的状态（status）" class="headerlink" title="3.3.1 查看修改的状态（status）"></a>3.3.1 查看修改的状态（status）</h3><ul>
<li>作用：查看修改的状态（暂存区、工作区）</li>
<li>命令形式：<code>git status</code></li>
</ul>
<h3 id="3-3-2-添加工作区到暂存区（add）"><a href="#3-3-2-添加工作区到暂存区（add）" class="headerlink" title="3.3.2 添加工作区到暂存区（add）"></a>3.3.2 添加工作区到暂存区（add）</h3><ul>
<li>作用：添加工作区一个或多个文件的修改到暂存区</li>
<li>命令形式：<code>git add</code> 单个文件名 | 通配符 <ul>
<li>将所有修改加入暂存区： <code>git add .</code></li>
</ul>
</li>
</ul>
<h3 id="3-3-3-提交暂存区到本地仓库（commit）"><a href="#3-3-3-提交暂存区到本地仓库（commit）" class="headerlink" title="3.3.3 提交暂存区到本地仓库（commit）"></a>3.3.3 提交暂存区到本地仓库（commit）</h3><ul>
<li>作用：提交暂存区内容到本地仓库的当前分支</li>
<li>命令形式：<code>git commit -m &quot;注释内容&quot;</code></li>
</ul>
<h3 id="3-3-4-查看提交日志（log）"><a href="#3-3-4-查看提交日志（log）" class="headerlink" title="3.3.4 查看提交日志（log）"></a>3.3.4 查看提交日志（log）</h3><p>关于log的配合参数在3.1部分已配置为git-log的别名命令</p>
<ul>
<li>作用：查看提交记录</li>
<li>命令形式： <code>git log [options]</code><ul>
<li>options<ul>
<li>–all 显示所有分支</li>
<li>–pretty&#x3D;oneline 将提交信息显示为一行</li>
<li>–abbrev-commit 使得输出的commit Id 更简短</li>
<li>–graph 以图的形式显示</li>
</ul>
</li>
</ul>
</li>
<li>命令 <code>git reflog</code> 可以查看所有提交（包括已删除）的记录</li>
</ul>
<h3 id="3-3-5-版本回退"><a href="#3-3-5-版本回退" class="headerlink" title="3.3.5 版本回退"></a>3.3.5 版本回退</h3><ul>
<li>作用：版本切换</li>
<li>命令形式：<code>git reset --hard commitID</code><ul>
<li>commitID可以使用 <code>git log</code> 命令查看</li>
</ul>
</li>
<li>如何查看已经删除的记录？<ul>
<li>git reflog</li>
<li>这个指令可以看到已经删除的提交记录</li>
</ul>
</li>
</ul>
<h3 id="3-3-6-设置-git-忽略的文件"><a href="#3-3-6-设置-git-忽略的文件" class="headerlink" title="3.3.6 设置 git 忽略的文件"></a>3.3.6 设置 git 忽略的文件</h3><p>有些文件无需纳入Git的管理，也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件，比如：日志文件、编译过程中创建的临时文件等。在这种情况下，我们可以在工作目录中创建一个名为<code>.gitignore</code>的文件（文件名固定），列出要忽略的文件模式。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">touch .gitignore<br></code></pre></td></tr></table></figure>

<p>接下来在 <code>.gitignore</code>中编辑忽略的文件格式</p>
<p>比如：忽略以a为后缀的文件</p>
<figure class="highlight gams"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs gams"><span class="hljs-comment">*.a</span><br></code></pre></td></tr></table></figure>

<p>现创建一个a后缀的文件进行测试</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">touch file2.a<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/ab98e5e7085a458eb41a84ecad683251.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>这里发现尽管 <code>.gitignore</code> 未提交到暂存区，但是仍然有过滤的作用，先将其删除，再查询log：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shel">rm .gitignore<br>git log<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/274d0dd72f7845dea345e25c1cbf9d50.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>删除<code>.gitignore</code>后，<code>file2.a</code>文件出现在了工作区，说明了之前的配置，即忽略.a后缀的文件是有效果的。</p>
<p>另，若想<code>.gitignore</code>过滤的配置文件长久生效，需要先add到暂存区，然后在commit到仓库。</p>
<h3 id="3-3-7-实践"><a href="#3-3-7-实践" class="headerlink" title="3.3.7 实践"></a>3.3.7 实践</h3><p>创建 test-git 文件夹</p>
<p>在里面右键打开 Git - Bash，初始化一个git仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git init<br></code></pre></td></tr></table></figure>

<p>创建文件 </p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">touch file1.txt<br></code></pre></td></tr></table></figure>

<p>查看状态</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git status<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/316865fc73ce424380c642ae55b2837e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以看到 touch后的文件 一开始是 <code>Untracked</code> 即未跟踪的状态</p>
<p>将当前目录的所有文件添加到缓存区</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git add .<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/250f8f8c9b08440e97d5fe55c874f711.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>再次查看 git的状态，列出了 <code>Changes to be commiteed</code> （即将被提交）的文件列表，即Git暂存区的文件列表</p>
<p>将暂存区的所有文件提交到仓库（-m指定本次提交的描述）</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git commit -m &quot;test, add file1&quot;<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/a39cd0d4c9564f699f957728fcd2b39e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>提交之后在查看 Git状态，暂存区的文件列表已消失。</p>
<p>那么提交的文件去哪里了？则可通过日志查看</p>
<p>查看Git运行日志</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git log<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/e8d9dc17ebc84db38ae18e3e129e641a.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>现进行文件修改的测试，首先编辑本地文件  file01.txt里的内容</p>
<p>命令行或者直接打开文件两种方式</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">vi file1.txt<br></code></pre></td></tr></table></figure>

<p>vi 方式保存先按ESC，在输入<code>:wq</code> 保存退出</p>
<p><img src="https://img-blog.csdnimg.cn/e82e6de4ff6743b29dd84d49879a2842.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>修改过后再次查询 Git 状态，可以发现修改的 file01.txt文件变成了未跟踪的状态，此时它处于工作区，接下来再将整个文件add到缓存区<br><img src="https://img-blog.csdnimg.cn/a88d43b3359f47c49d5adee7e0577cc0.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>在暂存区出现了 modified 修改操作的文件列表，接下来再使用commit命令提交</p>
<p><img src="https://img-blog.csdnimg.cn/871c32e9aaa14724ad560d2808d9ba1f.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接着查看Git的日志</p>
<p><img src="https://img-blog.csdnimg.cn/1639b96d770c4dca9f915286b5f872f2.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以发现，之前的创建file1.txt和修改file1.txt都在日志中记录了下来，同时还显示了当时提交指定的描述。</p>
<p>现使用版本回退，将仓库回退到file1.txt修改前的状态</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git reset --hard 之前版本的提交ID<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/8bfd9cae19cc4021b287d4638f6f03fb.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述">此时再使用 <code>git log</code> 查看日志，发现修改file1.txt后的提交记录消失了<br><img src="https://img-blog.csdnimg.cn/03e2f09b8bbc4d70ba5adb9db121c7a1.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>提交后cat 之前修改过的file1.txt，可以发现输出内容为空，表示回退到了还没有修改的版本。</p>
<p>但是回退版本后，能否在返回到修改后的状态呢？答案是可以的。</p>
<p>首先使用 <code>git reflog </code> 命令查看所有提交过的命令，然后同样使用<code>git  reset --hard 版本号</code> 回到修改后的版本</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">git reflog<br>git reset --hard 修改后的版本号<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/ef67dc959f794f969fb92373811e9fb8.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以看到，成功切换到了后来的版本，接下来在cat file1.txt的内容</p>
<p><img src="https://img-blog.csdnimg.cn/66221402c27d4fd0a7a051fbb2d4cc5e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>版本切换成功</p>
<h2 id="3-4-分支"><a href="#3-4-分支" class="headerlink" title="3.4 分支"></a>3.4 分支</h2><p>几乎所有的版本控制都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的bug修改、开发新的功能，以免影响开发主线</p>
<h3 id="3-4-1-查看分支"><a href="#3-4-1-查看分支" class="headerlink" title="3.4.1 查看分支"></a>3.4.1 查看分支</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git branch<br></code></pre></td></tr></table></figure>

<h3 id="3-4-2-创建分支"><a href="#3-4-2-创建分支" class="headerlink" title="3.4.2 创建分支"></a>3.4.2 创建分支</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git branch 分支名<br></code></pre></td></tr></table></figure>

<h3 id="3-4-3-切换分支"><a href="#3-4-3-切换分支" class="headerlink" title="3.4.3 切换分支"></a>3.4.3 切换分支</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs shell">git checkout 分支名<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">切换分支，若分支不存在则先创建再切换</span><br>git checkout -b 分支名<br></code></pre></td></tr></table></figure>

<h3 id="3-4-4-合并分支"><a href="#3-4-4-合并分支" class="headerlink" title="3.4.4 合并分支"></a>3.4.4 合并分支</h3><p>一个分支上的提交可以合并到另一个分支</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git merge 分支名称<br></code></pre></td></tr></table></figure>

<p>一般都是将其他分支合并到 master，即在master分支里执行merge命令合并其他的分支</p>
<h3 id="3-4-5-删除分支"><a href="#3-4-5-删除分支" class="headerlink" title="3.4.5 删除分支"></a>3.4.5 删除分支</h3><p>不能删除当前分支，只能删除其他的分支</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git branch -d b1 # 删除分支时，需要做各种检查<br><br>git branch -D b1 # 不做任何检查，强制删除<br></code></pre></td></tr></table></figure>

<h3 id="3-4-6-解决冲突问题"><a href="#3-4-6-解决冲突问题" class="headerlink" title="3.4.6 解决冲突问题"></a>3.4.6 解决冲突问题</h3><p>场景：当同一个仓库两个分支同时修改同一个文件的同一行，不同分支具有不同的内容，当进行分支合并时，会产生冲突。</p>
<p>解决冲突步骤如下：</p>
<ul>
<li>处理文件中冲突的地方</li>
<li>将解决完冲突的文件加入暂存区（add）</li>
<li>提交到仓库（commoit）</li>
</ul>
<p>实践：</p>
<p>前提：在<strong>3.3.7 部分</strong>，已初始化一个仓库，并上传了一个file1.txt文件，现进行分支的创建于切换。并且已经配置号了<strong>3.1部分</strong>的<code>git-log</code>自定义的别名命令，现进行解决冲突的测试。</p>
<p><strong>0x001</strong>  切换分支 <code>dev1</code>，编辑 <strong>file1.txt</strong> 文件的内容</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git checkout dev1<br><br>vim fil1.txt<br></code></pre></td></tr></table></figure>

<p><strong>dev1</strong> 分支 <strong>file1.txt</strong>文件的内容如下：</p>
<figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">hello</span><br><span class="hljs-attribute">world</span><br></code></pre></td></tr></table></figure>

<p>修改后提交到暂存区、然后上传到仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git add .<br>git commit -m &#x27;update fil1 1-hello 2-world&#x27;<br>git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>

<p>运行结果：</p>
<p><img src="https://img-blog.csdnimg.cn/62547185482d4146a2845660942dfeb7.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以看到，刚才提交的操作已记录在ID缩写为 <code>98b5a8f</code> 的版本。其中的<strong>HEAD</strong>指向的则是该版本里操作的分支。</p>
<p><strong>0x010</strong> 切换到分支master，同样编辑 <strong>file1.txt</strong> 的内容</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git checkout master<br><br>vim file1.txt<br></code></pre></td></tr></table></figure>

<p>首先尝试与dev1的分支 <strong>file1.txt</strong> 文件内容一致，即：</p>
<figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">hello</span><br><span class="hljs-attribute">world</span><br></code></pre></td></tr></table></figure>

<p>修改保存<strong>file1.txt</strong>后，提交到暂存区、再提交到仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git add .<br>git commit -m &#x27;update file1 1-hello 2-wolrd&#x27;<br>git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/03a489c6dc3947faaa91945ab6bdd47e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>根据结果可以看到，刚刚提交的版本<code>e35a8a5</code> 是在测试之前ID缩写为 <code>902d053</code>版本的基础上产生的。</p>
<p>现在进行合并操作，看看是否会发生报错，目前<strong>dev1</strong>分支和<strong>master</strong>分支的仓库内容是一致的。（当前处于master分支）</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git merge dev1<br><br>git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/5221d0e5682a49879feda007a28c808f.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>刚刚的提交产生了<code>98b5a8f</code>版本，并且没有发生任何警告，通过结果可以直观的发现它是由<code>98b5a8f</code>和<code>e35a8a5</code>合并而来的。</p>
<p>现再次编辑<strong>master</strong>分支的file1.txt文件，将其改为不同于dev分支的file1.txt，然后再进行分支合并。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">vim file1.txt<br></code></pre></td></tr></table></figure>

<p>file1.txt 只修改第二行的内容为:</p>
<figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">hello</span><br><span class="hljs-attribute">uni</span><br></code></pre></td></tr></table></figure>

<p>修改后保存退出，提交到暂存区、仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git add .<br>git commit -m &#x27;update file1 1-hello 2-uni&#x27;<br>git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/c34e659e443346b092abde846819f749.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>现再次进行合并</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">git merge dev1<br>git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/8561091f572440219ec385a3543c56f2.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>出现了 <code>Already up to date</code> ，所以在Master合并了其他分支后，在Master里进行文件内容的修改，是与其他分支文件内容没有关联的。</p>
<p><strong>0x011</strong> 切换到 dev1 分支，编辑 file1.txt文件的内容</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git checkout dev1<br><br>vim file1.txt<br></code></pre></td></tr></table></figure>

<p>文件内容依旧是之前的</p>
<figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">hello</span><br><span class="hljs-attribute">world</span><br></code></pre></td></tr></table></figure>

<p>现将其改成：</p>
<figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">hi</span><br><span class="hljs-attribute">world</span><br></code></pre></td></tr></table></figure>

<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git add .<br>git commit -m &#x27;update file1 1-hi 2-world&#x27;<br>git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/f04bc7123f9b48418c05317b093bb711.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><strong>0x100</strong> 切换到 <strong>master</strong> 分支 查看文件内容</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">git checkout master<br>cat file1.txt<br></code></pre></td></tr></table></figure>

<p>运行结果：</p>
<p><img src="https://img-blog.csdnimg.cn/b2321ab20cc84691926d0a29357d05d7.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以发现，尽管合并了<strong>dev1</strong>分支，且在<strong>dev1</strong>分支里提交修改的<strong>file1.txt</strong> 文件到仓库，切换回<strong>master</strong>分支，发现文件<strong>file1.txt</strong> 未发生改变，这说明合并分支只是将其他分支的当前状态保存到了主分支，之后子分支的操作则不能影响到父分支的仓库，现在再次进行合并</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git merge dev1<br></code></pre></td></tr></table></figure>

<p>执行合并操作，出现合并冲突的错误提示，<code>fix conflicts and then commit the result.</code></p>
<p><img src="https://img-blog.csdnimg.cn/69f7020bd5984a4792a225f8d2a293af.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br>查看git的状态发现有一个同时修改 file1.txt 的提示</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git status<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/f7340eee6c7e46d48e95dcef4c745834.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>查看file1.txt的文件内容，如下：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">cat file1.txt<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/c7930c5dd8fa499a94f52083259ecf18.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以发现文件里同时出现了两个分支的修改内容</p>
<figure class="highlight asciidoc"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs asciidoc">&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<br><span class="hljs-section"> ... 这里是当前分支的fil1.txt文件内容</span><br><span class="hljs-section">=======</span><br><span class="hljs-code"> ... 这里是dev分支的fil1.txt文件内容</span><br>&gt;&gt;&gt;&gt;&gt;&gt;&gt; dev1<br></code></pre></td></tr></table></figure>



<p>最简单粗暴的方法是将这个文本的内容改成想要的内容，然后在add、commit。比如改成：</p>
<figure class="highlight autohotkey"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs autohotkey"><span class="hljs-built_in">hello,</span>wolrd<br></code></pre></td></tr></table></figure>

<p>接下来提交到暂存区、再提交到仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git add .<br><br>git commit -m &#x27;update 1-hello,wolrd&#x27;<br></code></pre></td></tr></table></figure>

<p>最后查看效果</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git-log # 笔者设置的别名命令（在文章的3-1部分）<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/e8f31e8e650f4688b3f0984d9853060a.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>根据结果可观察到，刚刚提交的<code>ee8c684</code>版本是由<code>a90569b</code>、<code>8a9aa0e</code>、<code>1ae843c</code>版本合并而来的，因为在提交时使用-m参数指定本次提交的描述，所以没有显示<code>Merge branch dev1</code>的字样，不过最终还是能说明merge最终还是生效了。</p>
<p>最后删除测试的<strong>dev1</strong>分支</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git branch -d dev1<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/9266b1b519f44c3c8387c46d6e3f42e3.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>由于之前我们已经进行过合并操作，所以可以直接删除分支，但是当dev1分支有变化，而且还没有合并到master时，删除分支会提示没有merge的报错。此时要么合并该分支，要么强制删除分支</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git branch -D dev1<br></code></pre></td></tr></table></figure>

<h3 id="3-4-7-开发中分支使用原则与流程"><a href="#3-4-7-开发中分支使用原则与流程" class="headerlink" title="3.4.7 开发中分支使用原则与流程"></a>3.4.7 开发中分支使用原则与流程</h3><p>几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的BUG修改、开发新的功能，以免影响开发主线。</p>
<p>在开发中，一般有如下分支使用原则与流程：</p>
<ul>
<li>master（生产）分支</li>
</ul>
<p>线上分支、主分支，中小规模项目作为线上运行的应用对应的分支</p>
<ul>
<li>develop（开发）分支</li>
</ul>
<p>是从 master创建的分支，一般作为开发部门的主要开发分支，如果没有其他并行开发不同期上线要求，都可以在此版本进行开发，阶段开发完成后，需要合并到master分支，准备上线。</p>
<ul>
<li>feature &#x2F; xxxxx分支</li>
</ul>
<p>从develop创建的分支，一般是同期并行开发，但不同期上线时创建的分支，分支上的研发任务完成后合并到develop分支。</p>
<ul>
<li>hotfix &#x2F; xxxxx分支</li>
</ul>
<p>从 master 派生的分支，一般作为线上Bug修复使用，修复完成后需要合并到 master、test、develop分支。</p>
<ul>
<li>还有一些其他分支，比如test分支（用于代码测试），pre分支（预上线分支）等等…</li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/44f29d76927c48af86199d63e3add43d.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h1 id="四、Git远程仓库"><a href="#四、Git远程仓库" class="headerlink" title="四、Git远程仓库"></a>四、Git远程仓库</h1><hr>
<h2 id="4-1-常用的托管服务-远程仓库"><a href="#4-1-常用的托管服务-远程仓库" class="headerlink" title="4.1 常用的托管服务[远程仓库]"></a>4.1 常用的托管服务[远程仓库]</h2><p>Git具有本地仓库和远程仓库这两种类型的仓库，之前的内容是基于本地仓库的操作，接下来则进行Git远程仓库的学习，可以使用互联网上提供的代码托管服务平台来实现，比较常见的有 GitHub、码云、GitLab等。</p>
<ul>
<li><p>GitHub ，网址：<a target="_blank" rel="noopener" href="https://github.com/">https://github.com/</a> ，是一个面向开源及私有的软件项目托管平台，因为只支持Git作为唯一的版本库进行托管，故名为GitHub</p>
</li>
<li><p>码云，网址：<a target="_blank" rel="noopener" href="https://gitee.com/">https://gitee.com/</a> ，是国内的一个代码托管平台，由于服务器在国内，所以相比GitHub，码云速度快很多。</p>
</li>
<li><p>GitLab，网址：<a target="_blank" rel="noopener" href="https://about.gitlab.com/">https://about.gitlab.com/</a> 是一个用于仓库管理系统的开源项目，使用Git作为代码管理工具，并在此基础上搭建起来的Web服务，一般用于企业、学校等内部网络搭建git私服。</p>
</li>
</ul>
<h2 id="4-2-配置-SSH公钥"><a href="#4-2-配置-SSH公钥" class="headerlink" title="4.2 配置 SSH公钥"></a>4.2 配置 SSH公钥</h2><ul>
<li><p>在本地 Git Bash生成 SSH公钥</p>
<ul>
<li><code>ssh-keygen -t rsa</code></li>
<li>不断回车（若公钥已经存在，则自动覆盖）</li>
</ul>
</li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/5696c2189f9148acb2fb048c9fe1fd70.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<ul>
<li><p>Gitee设置账户公钥</p>
<ul>
<li><p>在本地的 <code>Git Bash </code>获取公钥 </p>
<ul>
<li><code>cat ~/.ssh/id_rsa.pub</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/5c36466d9e624639b8c552a2c3d0879b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接下来在 Gitee 个人中心 安全设置 - SSH公钥 里设置 刚才生成的公钥，这里笔者将标题指定为设备名称，用于区分其他的公钥。</p>
<p><img src="https://img-blog.csdnimg.cn/14790dca1af04bbe803e209e51381570.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>添加完毕后：</p>
<p><img src="https://img-blog.csdnimg.cn/ca53bb9435354efb981e954e6d5bbe32.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>验证是否配置成功</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">ssh -T git@gitee.com<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/b3f19373e3144047ac70666c25651cfa.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="4-3-Gitee-新建仓库"><a href="#4-3-Gitee-新建仓库" class="headerlink" title="4.3 Gitee 新建仓库"></a>4.3 Gitee 新建仓库</h2><p>码云注册过程略过，以下是注册完毕后的记录</p>
<p>网址：<a target="_blank" rel="noopener" href="https://gitee.com/projects/new">https://gitee.com/projects/new</a></p>
<p>是否开源根据个人情况而定，笔者这里是将仓库作为开源的资料分享</p>
<p><img src="https://img-blog.csdnimg.cn/c0bed7f6d3eb4fb89898ea8dd6f23937.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接下来复制远程仓库的 SSH地址</p>
<p><img src="https://img-blog.csdnimg.cn/cf016c8043a7435883f094cb55e71c2a.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">git remote add origin 仓库的SSH地址<br><br>git remote #查看当前Git的所有远程地址<br></code></pre></td></tr></table></figure>

<p>接下来将本地仓库上传到远程的Gitee仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git push origin master<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/5e44dac1aa6a467cb6183f2c8f49579a.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>刷新 gitee仓库，发现仓库提交成功</p>
<p><img src="https://img-blog.csdnimg.cn/0a50c63a04ff45b285f340709cf87b49.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="4-4-操作远程仓库"><a href="#4-4-操作远程仓库" class="headerlink" title="4.4 操作远程仓库"></a>4.4 操作远程仓库</h2><h3 id="4-4-1-添加远程仓库"><a href="#4-4-1-添加远程仓库" class="headerlink" title="4.4.1 添加远程仓库"></a>4.4.1 添加远程仓库</h3><p>先初始化本地库，确保有本地git仓库，然后与已创建的远程库进行对接。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git remote add &lt;远程名称&gt; &lt;仓库路径&gt;<br></code></pre></td></tr></table></figure>

<ul>
<li>远程名称，默认是origin，取决于远程服务器的设置</li>
<li>仓库路径，从远程服务器获取此URL</li>
<li>比如：&#96;git remote add origin <a href="mailto:&#103;&#x69;&#116;&#64;&#x67;&#105;&#116;&#101;&#x65;&#x2e;&#99;&#111;&#109;">&#103;&#x69;&#116;&#64;&#x67;&#105;&#116;&#101;&#x65;&#x2e;&#99;&#111;&#109;</a>:xxx&#x2F;xxxxxx.git:</li>
</ul>
<h3 id="4-42-查看远程仓库"><a href="#4-42-查看远程仓库" class="headerlink" title="4.42 查看远程仓库"></a>4.42 查看远程仓库</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git remote<br></code></pre></td></tr></table></figure>

<h3 id="4-4-3-推送到远程仓库"><a href="#4-4-3-推送到远程仓库" class="headerlink" title="4.4.3 推送到远程仓库"></a>4.4.3 推送到远程仓库</h3><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git push [-f] [--set -upstream] [远程名称[本地分支名][:远程分支名]]<br></code></pre></td></tr></table></figure>

<ul>
<li><p>若远程分支名和本地分支名相同，则可以只写本地分支名，比如：</p>
<p><code>git push origin master</code></p>
</li>
<li><p>-f 强制覆盖 *慎用</p>
</li>
<li><p><code>--set -upstream</code> 推送到远端的同时且建立起和远端分支的关联关系</p>
<p>比如：<code>git push --set-upstream origin master</code></p>
</li>
<li><p>如果当前分支已经和远端分支关联，则可以省略分支名和远端名。</p>
<p>比如：<code>git push</code> 将 master 分支推送到已关联的远端分支</p>
</li>
</ul>
<h3 id="4-4-4-本地分支与远程分支的关联关系"><a href="#4-4-4-本地分支与远程分支的关联关系" class="headerlink" title="4.4.4 本地分支与远程分支的关联关系"></a>4.4.4 本地分支与远程分支的关联关系</h3><ul>
<li>查看关联关系我们可以使用 <code>git branch -vv </code>命令</li>
</ul>
<h3 id="4-4-5-从远程仓库克隆"><a href="#4-4-5-从远程仓库克隆" class="headerlink" title="4.4.5 从远程仓库克隆"></a>4.4.5 从远程仓库克隆</h3><p>远程分支和本地的分支一样，我们可以进行merge操作，只是需要先把远端仓库里的更新都下载到本地，再进行操作。</p>
<p>抓取命令：<code>git fetch [remote name] [branch name]</code></p>
<ul>
<li>抓取命令就是将仓库里的更新都抓取到本地，不会进行合并</li>
<li>如果不指定远端名称和分支名，则抓取所有分支</li>
</ul>
<p>拉取命令：<code>git pull [remote name] [branch name]</code></p>
<ul>
<li>拉取命令就是将远端仓库的修改拉到本地并自动进行合并，等同于 <code>fetch + merge</code></li>
<li>如果不指定远端名称和分支名，则抓取所有分支并更新当前分支</li>
</ul>
<p>范例：通过Https地址进行克隆，测试的地址：<a target="_blank" rel="noopener" href="https://gitee.com/ccuni/web.git">https://gitee.com/ccuni/web.git</a></p>
<p><img src="https://img-blog.csdnimg.cn/5ca40e5c9c91412b968e7648d75ea7e6.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>首先在克隆保存位置打开 Git Bash，然后使用 git clone 命令进行克隆，并将文件名重命名为 test-clone</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git clone https://gitee.com/ccuni/web.git test-clone<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/d4fe18147eb74f5eae192c578ad05728.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>第二种克隆则可以通过SSH，比如笔者之前设置了Gitee账户的远程SSH，所以可以通过本机去连接Gitee账户的仓库，其他账户则不行。</p>
<h3 id="4-4-6-测试远程分支的提交"><a href="#4-4-6-测试远程分支的提交" class="headerlink" title="4.4.6 测试远程分支的提交"></a>4.4.6 测试远程分支的提交</h3><p>在克隆的文件夹里打开 Git Bash，创建一个测试文件</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs shell">touch file3.txt<br>git add .<br>git commit -m &#x27;add file3&#x27;<br>git push<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/a13a0a00b1d64f838f1c2f4c4147038c.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/74e5fbce320a48e090bfc89551227db5.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接下来，在之前上传到仓库的本地Git仓库里执行拉取的命令，此时是操作同一个gitee仓库</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git fetch<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/b891d4b6130a405891a742830d109c4d.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以看到，使用fetch命令获取到的仓库版本号<code>3121a5c</code>在当前版本号<code>ee8c684</code>的上面，此时需要手动执行一个merge命令</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git merge origin/master<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/f179d1e0f3e0466f8e40809b6cdb572e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>现在换一种方式进行拉取，首先继续在克隆后的文件夹里新建一个文件并push提交</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs shell">touch file4.txt<br>git add .<br>git commit -m &#x27;add file4&#x27;<br>git push<br></code></pre></td></tr></table></figure>

<p><img src="https://img-blog.csdnimg.cn/6a2839a677e542a4bfa1e5012ab02b51.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接着在之前本地的git仓库里进行 <code>pull</code> 拉取操作</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">git pull<br></code></pre></td></tr></table></figure>
<p><img src="https://img-blog.csdnimg.cn/f1c97fd0f82d4856b81b4598ce90decb.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="4-4-7-解决合并冲突"><a href="#4-4-7-解决合并冲突" class="headerlink" title="4.4.7 解决合并冲突"></a>4.4.7 解决合并冲突</h3><p>在一段时间，A、B用户修改了同一个文件，且修改了同一行位置的代码，此时会发生合并冲突。</p>
<p>A用户在本地修改代码后优先推送到远程仓库，此时B用户在本地修订代码，提交到本地仓库后，也需要推送到远程仓库，此时B用于比A用户提交的晚，故需要先拉取远程仓库的提交，经过合并后才能推送到远程分支，如下图所示：</p>
<p><img src="https://img-blog.csdnimg.cn/36853c172bea4e1b8155cffa1ba6b28b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>在 B 用户拉取代码时，因为 A、B用户同一时间段修改了同一个文件的相同位置的代码，故会发生合并冲突。</p>
<p>远程分支合并时发生冲突和本地分支冲突的解决是一样的。可参考 本篇文章的 <strong>3.4.6部分</strong></p>
<h3 id="4-4-8-操作总结"><a href="#4-4-8-操作总结" class="headerlink" title="4.4.8 操作总结"></a>4.4.8 操作总结</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_">#</span><span class="language-bash"><span class="hljs-comment">################ 1- 将本地仓库推送到远程仓库</span></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">完成 4.1、4.2、4.3的操作</span><br>略<br><span class="hljs-meta prompt_"># </span><span class="language-bash">[test-git] 添加远程仓库</span><br>git remote add orgin git@gitee.com/**/**.git<br><span class="hljs-meta prompt_"># </span><span class="language-bash">[test-git] 将 master分支推送到远程仓库，并与远程仓库的master分支绑定关联关系</span><br>git push --set-upstream orgin master<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_">#</span><span class="language-bash"><span class="hljs-comment">################ 2- 将远程仓库克隆到本地</span></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">将远程仓库克隆到本地 git_clone 目录下</span><br>git clone git@gitee.com/**/**.git git_clone<br><span class="hljs-meta prompt_"># </span><span class="language-bash">[git_clone] 以精简的方式提交记录 3.1 部分的别名命令</span><br>git-log<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_">#</span><span class="language-bash"><span class="hljs-comment">################ 3- 将本地修改推送到远程仓库</span></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">[test-git] 创建文件 file3.txt</span><br>略<br><span class="hljs-meta prompt_"># </span><span class="language-bash">[test-git] 将修改加入暂存区并提交到仓库，提交记录内容为：add file3</span><br>git add .<br>git commit -m &#x27;add file3&#x27;<br><span class="hljs-meta prompt_"># </span><span class="language-bash">[git_clone] 将 master 分支的修改推送到远程仓库</span><br>git push origin master<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_">#</span><span class="language-bash"><span class="hljs-comment">################ 4- 将远程仓库的修改更新到本地</span></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">[git_clone] 将远程仓库修改再拉取到本地</span><br>git pull<br></code></pre></td></tr></table></figure>



<h1 id="五、在IDEA中使用Git"><a href="#五、在IDEA中使用Git" class="headerlink" title="五、在IDEA中使用Git"></a>五、在IDEA中使用Git</h1><hr>
<h2 id="5-1-在-IDEA中配置-Git"><a href="#5-1-在-IDEA中配置-Git" class="headerlink" title="5.1 在 IDEA中配置 Git"></a>5.1 在 IDEA中配置 Git</h2><p>File -&gt; Settings </p>
<p>搜索 Git，点击 Test 测试，可以自动识别到 Git的安装目录</p>
<p><img src="https://img-blog.csdnimg.cn/f30635df36154650a380c010e0c548ba.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="5-2-在IDEA中操作GIT"><a href="#5-2-在IDEA中操作GIT" class="headerlink" title="5.2 在IDEA中操作GIT"></a>5.2 在IDEA中操作GIT</h2><p>场景：本地已有一个项目，但不是git项目，需要将这个项目放到码云的仓库里，和其他开发人员继续一起协作开发。</p>
<h3 id="5-2-1-远程创建仓库"><a href="#5-2-1-远程创建仓库" class="headerlink" title="5.2.1 远程创建仓库"></a>5.2.1 远程创建仓库</h3><p>创建远程仓库参考 4.3 部分</p>
<h3 id="5-2-2-初始化本地仓库"><a href="#5-2-2-初始化本地仓库" class="headerlink" title="5.2.2 初始化本地仓库"></a>5.2.2 初始化本地仓库</h3><p>进入 File -&gt; Setting</p>
<p>首先确保版本控制这里为空，若已有一个项目之类的，需要先将其删除。</p>
<p><img src="https://img-blog.csdnimg.cn/90e88413da9b4fd8aec67364c2fb9178.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接下来使用 IDEA 创建 Git仓库</p>
<p><img src="https://img-blog.csdnimg.cn/81f2268c7ca142999488d4e76325fe30.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>点击创建 Git 仓库后，选择当前打开的IDEA项目，设置完毕后，可以在File-&gt;Settings里看到版本控制的内容如下：</p>
<p><img src="https://img-blog.csdnimg.cn/31bdc37cb3574d3bbd6c448dfe8b01d1.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接下来在IDEA项目根目录创建<code>.gitignore</code> 文件，用于过滤一些不需要上传的文件夹或文件</p>
<p>笔者设置的<code>.gitignore</code>的内容是：（参考于SpringBoot项目）</p>
<figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs awk">HELP.md<br>target/<br>!.mvn<span class="hljs-regexp">/wrapper/m</span>aven-wrapper.jar<br>!**<span class="hljs-regexp">/src/m</span>ain<span class="hljs-regexp">/**/</span>target/<br>!**<span class="hljs-regexp">/src/</span>test<span class="hljs-regexp">/**/</span>target/<br><br><span class="hljs-comment">### STS ###</span><br>.apt_generated<br>.classpath<br>.factorypath<br>.project<br>.settings<br>.springBeans<br>.sts4-cache<br><br><span class="hljs-comment">### IntelliJ IDEA ###</span><br>.idea<br>*.iws<br>*.iml<br>*.ipr<br><br><span class="hljs-comment">### NetBeans ###</span><br><span class="hljs-regexp">/nbproject/</span>private/<br><span class="hljs-regexp">/nbbuild/</span><br><span class="hljs-regexp">/dist/</span><br><span class="hljs-regexp">/nbdist/</span><br><span class="hljs-regexp">/.nb-gradle/</span><br>build/<br>!**<span class="hljs-regexp">/src/m</span>ain<span class="hljs-regexp">/**/</span>build/<br>!**<span class="hljs-regexp">/src/</span>test<span class="hljs-regexp">/**/</span>build/<br><br><span class="hljs-comment">### VS Code ###</span><br>.vscode/<br></code></pre></td></tr></table></figure>



<h3 id="5-2-3-提交到本地仓库"><a href="#5-2-3-提交到本地仓库" class="headerlink" title="5.2.3 提交到本地仓库"></a>5.2.3 提交到本地仓库</h3><p>将当前项目提交到Git仓库</p>
<p><img src="https://img-blog.csdnimg.cn/8ec69c0d8c1b49f5b6a5cfac4d2416d9.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/b801223f5d4b470bae00eab1278d2fb4.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>点击提交后会进行代码分析，这里提示了若干个错误和警告</p>
<p>![在这里插入图片描述](<a target="_blank" rel="noopener" href="https://img-blog.csdnimg.cn/a4920b55df614e85a5f2928682b04cdf.png#pic_center">https://img-blog.csdnimg.cn/a4920b55df614e85a5f2928682b04cdf.png#pic_center</a> &#x3D;50%x)</p>
<p>笔者这里仅做测试，先提交上去试试，提交完成后</p>
<p><img src="https://img-blog.csdnimg.cn/6f1913e262f846dba2cb4f03b32a7a03.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="5-2-4-推送到远程仓库"><a href="#5-2-4-推送到远程仓库" class="headerlink" title="5.2.4 推送到远程仓库"></a>5.2.4 推送到远程仓库</h3><p><img src="https://img-blog.csdnimg.cn/3a6582f4063549e385eb1eb7cd13b2a2.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br><img src="https://img-blog.csdnimg.cn/760b9c719d984a4ebd9a992f361ace08.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>远程的地址为Gitee仓库的 SSH网址</p>
<p><img src="https://img-blog.csdnimg.cn/8d90e2f727fd498d93477cfb663cdbed.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/2c6112f8af854196a3fa170d68da8b6e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>出现错误：</p>
<p><img src="https://img-blog.csdnimg.cn/bf11a11b3f104b36aeebf324027e72b0.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>这里报错的原因是，没有将远程仓库的文件pull下来，所以需要先pull远程仓库的文件，与本地仓库进行合并，之后在push到远程仓库</p>
<p><img src="https://img-blog.csdnimg.cn/4f56a8cc62c544fe8f58bf999437b8ff.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>拉取完毕后，再次进行推送，最后的Git日志如下：</p>
<p><img src="https://img-blog.csdnimg.cn/7a5c371896fb4ae1aaaa777355b7523a.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以观察到，之前Git测试的所有操作都存储在了记录中，同时查看Gitee对应的仓库，可以查到项目的所有文件。</p>
<p><img src="https://img-blog.csdnimg.cn/1623778bcb7248ce91f0cb6f98007cc1.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="5-2-5-删除操作"><a href="#5-2-5-删除操作" class="headerlink" title="5.2.5 删除操作"></a>5.2.5 删除操作</h3><p>由于之前的测试，项目里多余了四个文件，现将其删除，首先在IDEA项目中直接将其删除</p>
<p><img src="https://img-blog.csdnimg.cn/204133ab89dd40f687d40dcc2d0f9dd6.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>使用IDEA进行快速提交，快捷键 [Ctrl + K]</p>
<p><img src="https://img-blog.csdnimg.cn/4db94c9df4df42278ae69d50df3bb04f.png#pic_Center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>之后将本次的修改，push到远程仓库</p>
<p><img src="https://img-blog.csdnimg.cn/c6c8a21aa3324f4eb4e64e537dd11000.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br><img src="https://img-blog.csdnimg.cn/b20c113ec3dc44c6993060a2ce7c0c0f.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>查看Git运行日志</p>
<p><img src="https://img-blog.csdnimg.cn/8ada36907ca443639e785c2609840fe9.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>查看远程仓库内容，删除完毕</p>
<p><img src="https://img-blog.csdnimg.cn/f591c5ad22304074a7f75e4a874f2e5f.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="5-2-6-克隆远程仓库"><a href="#5-2-6-克隆远程仓库" class="headerlink" title="5.2.6 克隆远程仓库"></a>5.2.6 克隆远程仓库</h3><p><img src="https://img-blog.csdnimg.cn/a69e5a787ad543b2adc7f8960a93162b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p><img src="https://img-blog.csdnimg.cn/f29bc08fc8cb4d43ab89bfae9513ff8b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>提示是否打开，这里笔者选择打开，因为之后会进行协作开发的模拟操作</p>
<p><img src="https://img-blog.csdnimg.cn/ba4249cef33b4635a0946e949b4f1ff1.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>打开项目后，可以发现具有和之前同样的Git运行日志，克隆完毕后需对项目进行Web的相关配置，这里笔者就略过了。</p>
<p><img src="https://img-blog.csdnimg.cn/335ab5efb0cd4f1bb9681b223d94231b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="5-2-7-协作开发时的冲突问题"><a href="#5-2-7-协作开发时的冲突问题" class="headerlink" title="5.2.7 协作开发时的冲突问题"></a>5.2.7 协作开发时的冲突问题</h3><p>场景：A、B程序员同时操作和一个远程仓库同步的项目，他们都修改了同一个文件，但是修改的内容不同，现在A程序员将项目pull到远程仓库，此时B在将项目pull到远程仓库时则提示冲突。</p>
<p><strong>这里笔者用克隆前的项目模拟A程序员，克隆后的项目模拟B程序员</strong></p>
<h4 id="避免冲突案例"><a href="#避免冲突案例" class="headerlink" title="避免冲突案例"></a>避免冲突案例</h4><p>模拟：</p>
<p>A程序员修改文件 <code>CodeAction.java</code>，如图，注释了27行到32行之间的部分</p>
<p><img src="https://img-blog.csdnimg.cn/d252181b2365459f8ec222d0920136a7.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接着提交到本地仓库，然后推送、上传到远程仓库，和 5.2.4 部分一致</p>
<p><img src="https://img-blog.csdnimg.cn/6537d44df7d54cab8ee600cae0e463c5.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>接着，推送到远程仓库，执行后的结果</p>
<p><img src="https://img-blog.csdnimg.cn/0347ec5791bf4dcba6875a009b4118a7.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>现模拟程序员B的操作，同样是修改CodeAction.java：</p>
<p><strong>注</strong>：此时远程仓库的内容已经发现变化了，多了程序员A上传的版本，所以程序员B在进行修改前，有必要pull拉取远程仓库的内容。</p>
<p><img src="https://img-blog.csdnimg.cn/757f35c6842746e7a81e0d686bede3f0.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>注释31行到32行的内容，提交到本地仓库，然后push到远程仓库</p>
<p><img src="https://img-blog.csdnimg.cn/3d777a03b8c74b95a24543c063a19905.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>观察Git运行日志，此时没有报错，上传成功</p>
<p><img src="https://img-blog.csdnimg.cn/65dac3a1e28541e28ad4c03e03f6c707.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h4 id="解决冲突问题"><a href="#解决冲突问题" class="headerlink" title="解决冲突问题"></a>解决冲突问题</h4><p><strong>程序员A：</strong></p>
<p><img src="https://img-blog.csdnimg.cn/f1a6879eaefd401c96bbdcbfb4aaab9b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>提交到远程仓库过程图略</p>
<p><strong>程序员B：</strong></p>
<p>同样地修改了 CodeAction.java 内容，提交到本地仓库后再上传到远程仓库。</p>
<p><img src="https://img-blog.csdnimg.cn/06b7ef2f9a6b4e6eb9723b60c8a51ed1.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>上传时出现错误警告，提示了推送前需要合并远程更改，这里笔者选择了第三个选项</p>
<p>![在这里插入图片描述](<a target="_blank" rel="noopener" href="https://img-blog.csdnimg.cn/de06bf42e8e148a4a44802b947c23ba8.png#pic_center">https://img-blog.csdnimg.cn/de06bf42e8e148a4a44802b947c23ba8.png#pic_center</a> &#x3D;50%x)</p>
<p>在接下来的弹窗中，直接关闭，然后去查看冲突的部分</p>
<p><img src="https://img-blog.csdnimg.cn/7c556342dcc34bf28ddbf746949df6e2.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>可以发现冲突的地方，文件名直接变成了红色，并且和之前3.4.6 部分一样会有 &lt;&lt;&lt;&lt;HEAD的提示</p>
<p><img src="https://img-blog.csdnimg.cn/a6a0d04a92da4ff39bcd3fa906d6d0c4.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>现在将 CodeAction.java的内容改成想要的结果 然后重新提交到本地仓库，然后在提交到远程仓库</p>
<p><img src="https://img-blog.csdnimg.cn/79fe55caf6cc4fd2a8eb9303007d081e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>提交时出现冲突，点击[解决]</p>
<p><img src="https://img-blog.csdnimg.cn/20499397141e42dea4a2b6b100fca345.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p> 在冲突窗口中点击合并</p>
<p><img src="https://img-blog.csdnimg.cn/d20c0d1ce93341f29c16c766bb73864b.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>点击应用</p>
<p><img src="https://img-blog.csdnimg.cn/c10e6d736d414fe7bab84f89b471b1c9.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>![在这里插入图片描述](<a target="_blank" rel="noopener" href="https://img-blog.csdnimg.cn/3e1e91799e15485882f7492a99fac2da.png#pic_center">https://img-blog.csdnimg.cn/3e1e91799e15485882f7492a99fac2da.png#pic_center</a> &#x3D;50%x)</p>
<p>最后在push推送到远程仓库，解决完毕。</p>
<p><img src="https://img-blog.csdnimg.cn/2c4f67ae64c040f586399878ae71f427.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>综上，协作开发的冲突原因主要就是多个程序员在开发时如果是操作同一个文件，存在程序员没有从远程仓库里，拉取之前最近其他人提交的版本，所以在上传时候就会提示文件内容冲突，此时得修改为想要的结果，进行了合并的操作，最后再上传到远程仓库。</p>
<h3 id="5-2-8-创建分支"><a href="#5-2-8-创建分支" class="headerlink" title="5.2.8 创建分支"></a>5.2.8 创建分支</h3><p><img src="https://img-blog.csdnimg.cn/246a80b36b1748a3922cafb57c50848a.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h3 id="5-2-9-切换分支"><a href="#5-2-9-切换分支" class="headerlink" title="5.2.9 切换分支"></a>5.2.9 切换分支</h3><p><img src="https://img-blog.csdnimg.cn/fdc5894938f0449c99b78c57e7dbfd95.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="5-3-IDEA常用GIT操作入口"><a href="#5-3-IDEA常用GIT操作入口" class="headerlink" title="5.3 IDEA常用GIT操作入口"></a>5.3 IDEA常用GIT操作入口</h2><p>第一张图的快捷入口可满足基本的开发需求（<a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1MU4y1Y7h5?p=26&spm_id_from=pageDriver">图片来自视频资料</a>）</p>
<p><img src="https://img-blog.csdnimg.cn/7e88718f42bc478bac692e1d5c25b24e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h2 id="5-4-场景分析"><a href="#5-4-场景分析" class="headerlink" title="5.4 场景分析"></a>5.4 场景分析</h2><p>当前开发环境如下，项目团队的每个人都对某个项目开发了一段时间，接下来要切换成团队开发模式。</p>
<p>团队有<strong>组长</strong>和<strong>若干组员</strong>组成（组长就是开发中的<strong>项目经理</strong>）。注：所有操作都在<strong>IDEA</strong>中完成。（<a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1MU4y1Y7h5?p=27&spm_id_from=pageDriver">以下图片来自视频资料</a>）</p>
<p>练习场景如下：</p>
<ol>
<li>由组长基于本项目创建本地仓库； 创建远程仓库，推送项目到远程仓库</li>
</ol>
<p><img src="https://img-blog.csdnimg.cn/2d36d177fa5040d3b288a858bb1dc95c.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<ol start="2">
<li>每一位组员从远程仓库克隆项目到 IDEA中，这样每个同学在自己电脑上就有了一个工作副本，可以正式的开始开发了。我们模拟两个组员（组员A、组员B），克隆两个工作区。</li>
</ol>
<p><img src="https://img-blog.csdnimg.cn/727008ae4f2b4ceca07a09f11d2923f0.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<ol start="3">
<li>组员A修改工作区，提交到本地仓库，再推送到远程仓库。组员B可以直接从远程仓库获取最新的代码</li>
</ol>
<p><img src="https://img-blog.csdnimg.cn/aecd8f84020e48d0bc43081e7598f9a7.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<ol start="4">
<li><p>组员A和组员B修改了同一个文件的同一行，提交到本地没问题，但是推送到远程仓库时，后一个推送操作就失败了。</p>
<p>解决方法：需要先获取远程仓库的代码到本地仓库，编辑冲突，提交并推送代码。</p>
</li>
</ol>
<p><img src="https://img-blog.csdnimg.cn/2a420d2c7c174f788a6fe0c7f67f931e.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h1 id="六、IDEA设置GitBash作为Terminal终端"><a href="#六、IDEA设置GitBash作为Terminal终端" class="headerlink" title="六、IDEA设置GitBash作为Terminal终端"></a>六、IDEA设置GitBash作为Terminal终端</h1><p>File -&gt;Settings</p>
<p><img src="https://img-blog.csdnimg.cn/553b282977a945c585460a760d5a6cff.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<p>设置之后可以直接在IDEA项目中使用Git命令，和Git Bash里的操作一样，十分方便</p>
<p><img src="https://img-blog.csdnimg.cn/8c3ca755f98848fa82e972e0d91939c6.png#pic_center" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></p>
<h1 id="七、分支模型"><a href="#七、分支模型" class="headerlink" title="七、分支模型"></a>七、分支模型</h1><hr>
<p>核心思想：</p>
<ul>
<li><p>课前：</p>
<ul>
<li>老师：每次课前都给学生共享一个分支（推送到远程仓库）<ul>
<li>book&#x2F;xx 分支</li>
<li>这是本次课要实现的代码分支，和讲义的代码完全一致</li>
<li>里面的代码提交记录，详细记录了每一次对代码修改的继细节</li>
</ul>
</li>
<li>学生：将代码更新到本地（即git pull 拉取到本地）</li>
</ul>
</li>
<li><p>课上：（老师和学生操作完全一样，模仿老师即可）</p>
<ul>
<li><p>执行 <code>fetch</code>操作，可使用IDEA可视化操作，也可使用命令操作</p>
</li>
<li><p>创建一个本次课的开发分支</p>
<ul>
<li><p>格式：dev&#x2F;xx</p>
</li>
<li><p>从上一次课的实现代码上创建本次课的代码，例如</p>
<ul>
<li>第一天，就从 <code>book/00</code> 创建一个开发分支 <code>dev/01</code><ul>
<li><code>book/00</code>是们项目的初始代码分支</li>
</ul>
</li>
<li>第二天，就从<code>book/01</code>创建一个开发分支<code>dev/02</code></li>
<li>…</li>
<li>第10天，就从 <code>book/09</code>创建一个开发分支 <code>dev/10</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="八、收获与总结"><a href="#八、收获与总结" class="headerlink" title="八、收获与总结"></a>八、收获与总结</h1><hr>
<p>通过本次的学习，对Git分布式版本控制进行了熟悉，学习起因是之前笔者的一个课设，笔者想将课设项目上传到Gitee，但结果提示每次只能上传20个文件，后来又了解到Git命令可以直接push所有文件到仓库，于是就决定好好学一下Git的相关知识。</p>
<p>花时间学习过后发现，Git的功能十分强大，怪不得 GitHub 在互联网领域如此重要。</p>
<p>Git Bash的操作十分简单，只要花时间去尝试，理解仓库、暂存区、工作区这几个概念。</p>
<p>另外，IDEA 集成 Git后真的十分方便，当出现冲突时可以直接看到同一个文件的哪一部分不相同，然后可以选择想要的结果。</p>
<p>在以后的学习当中，笔者会好好应用Git进行开发，因为它不仅方便开源，而且还适合版本更新。</p>

                
              </div>
            
            <hr/>
            <div>
              <div class="post-metas my-3">
  
    <div class="post-meta mr-3 d-flex align-items-center">
      <i class="iconfont icon-category"></i>
      

<span class="category-chains">
  
  
    
      <span class="category-chain">
        
  <a href="/categories/Git/" class="category-chain-item">Git</a>
  
  

      </span>
    
  
</span>

    </div>
  
  
    <div class="post-meta">
      <i class="iconfont icon-tags"></i>
      
        <a href="/tags/Git/">#Git</a>
      
    </div>
  
</div>


              
  

  <div class="license-box my-3">
    <div class="license-title">
      <div>Git 笔记_ Git分布式版本控制工具 概述 _ 常用命令 _ 分支操作 _ 使用 IDEA 连接Gitee远程仓库</div>
      <div>http://example.com/2022/03/29/Git 笔记_ Git分布式版本控制工具 概述 _ 常用命令 _ 分支操作 _ 使用 IDEA 连接Gitee远程仓库 +Demo/</div>
    </div>
    <div class="license-meta">
      
        <div class="license-meta-item">
          <div>作者</div>
          <div>John Doe</div>
        </div>
      
      
        <div class="license-meta-item license-meta-date">
          <div>发布于</div>
          <div>2022年3月29日</div>
        </div>
      
      
      <div class="license-meta-item">
        <div>许可协议</div>
        <div>
          
            
            
              <a target="_blank" href="https://creativecommons.org/licenses/by/4.0/">
              <span class="hint--top hint--rounded" aria-label="BY - 署名">
                <i class="iconfont icon-by"></i>
              </span>
              </a>
            
          
        </div>
      </div>
    </div>
    <div class="license-icon iconfont"></div>
  </div>



              
                <div class="post-prevnext my-3">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2022/03/31/%E6%9C%88%E5%BA%A6%E6%80%BB%E7%BB%93%20_%202022%E5%B9%B403%E6%9C%88%20_%20%E8%80%83%E7%A0%94%E4%B8%8E%E5%B0%B1%E4%B8%9A%E7%9A%84%E6%8A%89%E6%8B%A9%20_%20%E7%A1%AE%E5%AE%9A%E6%9C%AA%E6%9D%A5%E8%B5%B0%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%BC%80%E5%8F%91%E8%B7%AF%E7%BA%BF/" title="月度总结 _ 2022年03月 _ 考研与就业的抉择 _ 确定未来走大数据开发路线">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">月度总结 _ 2022年03月 _ 考研与就业的抉择 _ 确定未来走大数据开发路线</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2022/03/26/Hive%20%E7%AC%94%E8%AE%B03%20%E4%BD%BF%E7%94%A8Java%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%AE%9A%E4%B9%89SQL%E5%87%BD%E6%95%B0%20_%20Hive%E4%B8%89%E5%A4%A7%E7%B1%BB%E5%9E%8B%E5%87%BD%E6%95%B0%E7%9A%84%E7%AE%80%E8%A6%81%E5%8C%BA%E5%88%86%20UDF%E3%80%81UDAF%E3%80%81UDTF/" title="Hive 笔记3 使用Java实现自定义SQL函数 _ Hive三大类型函数的简要区分 UDF、UDAF、UDTF">
                        <span class="hidden-mobile">Hive 笔记3 使用Java实现自定义SQL函数 _ Hive三大类型函数的简要区分 UDF、UDAF、UDTF</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>

    <div class="side-col d-none d-lg-block col-lg-2">
      
  <aside class="sidebar" style="margin-left: -1rem">
    <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div class="toc-body" id="toc-body"></div>
</div>



  </aside>


    </div>
  </div>
</div>





  



  



  



  



  







    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v" for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>

    

    
  </main>

  <footer>
    <div class="footer-inner">
  
    <div class="footer-content">
       <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> 
    </div>
  
  
  
  
</div>

  </footer>

  <!-- Scripts -->
  
  <script  src="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://lib.baomitu.com/jquery/3.6.0/jquery.min.js" ></script>
<script  src="https://lib.baomitu.com/twitter-bootstrap/4.6.1/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>


  <script  src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var subtitle = document.getElementById('subtitle');
      if (!subtitle || !typing) {
        return;
      }
      var text = subtitle.getAttribute('data-typed-text');
      
        typing(text);
      
    })(window, document);
  </script>




  
    <script  src="/js/img-lazyload.js" ></script>
  




  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/tocbot/4.18.2/tocbot.min.js', function() {
    var toc = jQuery('#toc');
    if (toc.length === 0 || !window.tocbot) { return; }
    var boardCtn = jQuery('#board-ctn');
    var boardTop = boardCtn.offset().top;

    window.tocbot.init({
      tocSelector     : '#toc-body',
      contentSelector : '.markdown-body',
      headingSelector : CONFIG.toc.headingSelector || 'h1,h2,h3,h4,h5,h6',
      linkClass       : 'tocbot-link',
      activeLinkClass : 'tocbot-active-link',
      listClass       : 'tocbot-list',
      isCollapsedClass: 'tocbot-is-collapsed',
      collapsibleClass: 'tocbot-is-collapsible',
      collapseDepth   : CONFIG.toc.collapseDepth || 0,
      scrollSmooth    : true,
      headingsOffset  : -boardTop
    });
    if (toc.find('.toc-list-item').length > 0) {
      toc.css('visibility', 'visible');
    }
  });
</script>


  <script src=https://lib.baomitu.com/clipboard.js/2.0.10/clipboard.min.js></script>

  <script>Fluid.plugins.codeWidget();</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/anchor-js/4.3.1/anchor.min.js', function() {
    window.anchors.options = {
      placement: CONFIG.anchorjs.placement,
      visible  : CONFIG.anchorjs.visible
    };
    if (CONFIG.anchorjs.icon) {
      window.anchors.options.icon = CONFIG.anchorjs.icon;
    }
    var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
    var res = [];
    for (var item of el) {
      res.push('.markdown-body > ' + item.trim());
    }
    if (CONFIG.anchorjs.placement === 'left') {
      window.anchors.options.class = 'anchorjs-link-left';
    }
    window.anchors.add(res.join(', '));
  });
</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
    Fluid.plugins.fancyBox();
  });
</script>


  <script>Fluid.plugins.imageCaption();</script>

  <script  src="/js/local-search.js" ></script>





<!-- 主题的启动项，将它保持在最底部 -->
<!-- the boot of the theme, keep it at the bottom -->
<script  src="/js/boot.js" ></script>


  

  <noscript>
    <div class="noscript-warning">博客在允许 JavaScript 运行的环境下浏览效果更佳</div>
  </noscript>
</body>
</html>
